package com.wjk.kylin.mall.auth.feign;

import com.wjk.kylin.mall.auth.feign.fallback.AdminFeignServiceFallbackFactory;
import com.wjk.kylin.mall.common.core.bo.admin.OAuth2ClientBO;
import com.wjk.kylin.mall.common.core.bo.admin.UserNameBO;
import com.wjk.kylin.mall.common.core.dto.admin.OAuth2ClientInDTO;
import com.wjk.kylin.mall.common.core.dto.admin.UserIdInDTO;
import com.wjk.kylin.mall.common.core.dto.admin.UserNameInDTO;
import com.wjk.kylin.mall.common.core.dto.base.DataOutDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

/**
 * fallback 和 fallbackFactory 二选一
 *
 */
@FeignClient(value = "mall-admin",
        fallbackFactory = AdminFeignServiceFallbackFactory.class
)
public interface AdminFeignService {
    /**
     * 测试feign远程调用，与远程的RequestMapping地址和方法名一致
     *
     * @return
     */
    @PostMapping("/admin/user/loadUserByUsername")
    DataOutDTO<UserNameBO> loadUserByUsername(@RequestBody UserNameInDTO inDTO);

    /**
     * 查询 用户 权限
     * @param inDTO
     * @return
     */
    @PostMapping("/admin/menu/getMenuPermsByUser")
    DataOutDTO<List<String>> getMenuPermsByUser(@RequestBody UserIdInDTO inDTO);

    /**
     * 权限用户 角色
     * @param inDTO
     * @return
     */
    @PostMapping("/admin/user/getRoleIdByUserId")
    DataOutDTO<List<Long>> getRoleIdByUserId(@RequestBody UserIdInDTO inDTO);

    /**
     * 客户端信息
     * @param inDTO
     * @return
     */
    @PostMapping("/admin/oauth2/getOAuth2ClientById")
    DataOutDTO<OAuth2ClientBO> getOAuth2ClientById(@RequestBody OAuth2ClientInDTO inDTO);
}
